/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionnaires;

import java.util.ArrayList;
import java.util.Collection;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import modeles.Commentaire;
import modeles.Produit;
import modeles.Utilisateur;

/**
 *
 * @author Christian
 */
@Stateless
public class GestionnaireCommentaires {
    @EJB
    private GestionnaireProduits gestionnaireProduits;
    @EJB
    private GestionnaireUtilisateurs gestionnaireUtilisateurs;
    @PersistenceContext
    private EntityManager em;
    
    public void creeCommentaireTest() {
        Collection<Produit> produits = gestionnaireProduits.getAllProduits();
        ArrayList<Utilisateur> utilisateurs = new ArrayList<Utilisateur>(gestionnaireUtilisateurs.getAllUsers());
        if(produits.isEmpty() || utilisateurs.isEmpty()){
            return;
        }
        for(Produit p : produits){
            int random = (int) (Math.random() * (double)utilisateurs.size());
            em.persist(new Commentaire(utilisateurs.get(random), p, "ce jeu est trop bien"));
            random = (int) (Math.random() * (double)utilisateurs.size());
            em.persist(new Commentaire(utilisateurs.get(random), p, "j'adore ce jeu"));
        }
    }
    
    public Commentaire creeCommentaire(Produit produit, Utilisateur utilisateur, String Commentaire) {
        if(Commentaire == null || produit == null || utilisateur == null)
            return null;
        if(Commentaire.isEmpty())
            return null;
        Commentaire commentaire = new Commentaire(utilisateur, produit, Commentaire);
        em.persist(commentaire);
        return commentaire;
    }
    
     public Collection<Commentaire> getAllCommentaires() {
        Query q = em.createQuery("select o from Commentaire o", Commentaire.class);
        return q.getResultList();
    }

    public Commentaire getCommentaireById(int id) {
        Query q = em.createQuery("select o from Commentaire o where o.id=" + id, Commentaire.class);
        if(q.getResultList().size() <= 0) return null;
        return (Commentaire) q.getResultList().get(0);
    }

    public Collection<Commentaire> getCommentaireByUtilisateur(Utilisateur utilisateur) {
        Query q = em.createQuery("select o from Commentaire o where o.utilisateur.id=" + utilisateur.getId(), Commentaire.class);
        if(q.getResultList().size() <= 0) return null;
        return q.getResultList();
    }

    public Collection<Commentaire> getCommentaireByProduit(Produit produit) {
        Query q = em.createQuery("select o from Commentaire o where o.produit.id=" + produit.getId(), Commentaire.class);
        if(q.getResultList().size() <= 0) return null;
        return q.getResultList();
    }
    public boolean hasCommentaireByProduit(Produit produit) {
        Query q = em.createQuery("select Count(o) from Commentaire o where o.produit.id=" + produit.getId(), Commentaire.class);
        if(((Long) q.getResultList().get(0)) <= 0) 
               return false;
        else return true;
    }

    public void suprimeCommentaireById(int id) {
        em.remove(getCommentaireById(id));
    }
    
}
